// Traitement html
function htmlspecialchars(ch) {
   ch = ch.replace(/&/g,"&amp;") ;
   ch = ch.replace(/\"/g,"&quot;") ;
   ch = ch.replace(/\'/g,"&#039;") ;
   ch = ch.replace(/</g,"&lt;") ;
   ch = ch.replace(/>/g,"&gt;") ;
   return ch
}

$(document).ready(function(){

    // Ajustements généraux (liens, etc...)
    preparation ($(document)) ;

    //$("div.title").hide().fadeIn(1000) ;
    
    // Cadres éditables
    $("#editableEvenement").attr("contentEditable", "true") ;
    $("#editableEvenement").keydown(function(){
        $("#description").html(htmlspecialchars($("#editableEvenement").html()));//$('#editableEvenement').html()) ;
    });


    // Gestion de la fenêtre d'erreur'
    initialiserDivError($("div.error")) ;

    // Gestion des champs de lien entre tables
    //$("div.ChampLienTables").each(function(i){
        
    //});


    // Formulaire de connexion centré
    $("div#formLogib  n").hide() ;
    $("div#formLoginCentre div.box").css("visibility", "visible").hide() ;
    // On n'oublie pas d'annuler les autres champs !
    $("div#formLogin").html("") ;
    var valider = false;
    $("div.topmenu > div.showFormLogin").css("visibility", "visible") ;
    // Gestion du fadeout après validation
    $("div#formLoginCentre").attr("statut", "0") ;
    $("div#formLoginCentre div.box").prepend("");
    fAfficherMasquer = function(){
        if ($("div#formLoginCentre").attr("statut")==1) {
            $("div#formLoginCentre").attr("statut", "0") ;
            $("div.topmenu > div.showFormLogin").show();//css("visibility", "visible") ;
            $("div.topmenu > div.hideFormLogin").css("visibility", "hidden") ;
            $("div#formLoginCentre div.box").fadeOut("def") ;
        }
        else {
            $("div#formLoginCentre").attr("statut", "1") ;
            $("div.topmenu > div.showFormLogin").hide();//css("visibility", "hidden") ;
            $("div.topmenu > div.hideFormLogin").css("visibility", "visible") ;
            $("div#formLoginCentre div.box").fadeIn("def") ;
        }
    };
    $("a#showFormLogin").click(fAfficherMasquer);
    $("a.hideFormLogin").click(fAfficherMasquer);
    $("div#formLogin div.box").hide() ;

    // Tronquer les news trop longues
    /*$("div.news").each(function(i){
        var texte = $(this).find("span.texteNews").attr("id", "texteNews"+(i+1)).html() ;
        if (texte.length > 100)
        {
            // Séparation
            var debut = texte.substr(0,100);
            var fin = texte.substr(100) ;

            // Ajout des commandes pour aggrandir et réduire
            $("#texteNews"+(i+1)).html(debut) ;
            $("#texteNews"+(i+1)).append("<span id=\"suiteNews"+(i+1)+"\">"+fin+"</span>") ;
            $("#texteNews"+(i+1)).append("<a href=\"#\" id=\"reduireNews"+(i+1)+"\">... lire la suite</a>") ;
            $("#suiteNews"+(i+1)).hide() ;

            // Gestion des clics
            //$("#texteNews"+(i+1)).attr("statut","1")
           $("#reduireNews"+(i+1)).attr("statut", "1").click(function(){
                // Tout afficher
                if ($("#reduireNews"+(i+1)).attr("statut")=="1") {
                    $("#suiteNews"+(i+1)).fadeIn("normal", function(){
                        $("#reduireNews"+(i+1)).html(" -- Réduire");
                        $("#reduireNews"+(i+1)).attr("statut", "0") ;
                    }) ;
                }
                // Reduire
                else {
                    $("#reduireNews"+(i+1)).attr("statut", "1") ;
                    $("#suiteNews"+(i+1)).fadeOut("normal", function(){
                        $("#reduireNews"+(i+1)).html("... lire la suite")
                    }) ;
                }
            });
        }
    });*/

    

    // Adaptation des liens d'édition
   /* $("a.edition").each(function(i){
        $(this).removeAttr("class") ;
        $(this).click(function(){
        // Déclaration et initialisation d'une variable statique
            
            page = extrairePage($(this).attr("href")) ;
            ouvrirFormulaire("formulaire_"+(Math.round(Math.random()*1000)), page, function(){
                return true ;
            }, true) ;
            return false ;
        }) ;
    });*/

    // Adaptation des liens du menu
    /*$("div.menu a").each(function(i){
        $(this).click(function(){
            var page = extrairePage($(this).attr("href")) ;
            page = "pageAjaxContent="+page;
            $.ajax({
                type: "POST",
                url: "content.php",
                data: page,
                success: function(data){
                    $("div.content").fadeOut("fast", function(){
                        $(this).html(data).fadeIn("fast") ;
                    });
                }
            });
            return false ;
        });
    });*/
        //$("a").click(function(){return false;}) ;
    //adapterLiensEdition($("body")) ;

    // Adaptation du lien d'ajout de type de matériel
    /*$("a.nouveauMaterielType").removeAttr("href").attr("target", "_SELF").click(function(){
        ouvrirFormulaire("nouveauMaterielType", "updateMaterielType", function(id){
            $.getJSON("utilities/jsonDescriptions/jsonDescriptionMaterielType.php?id="+id, {}, function(data){
                $("td.nouveauMaterielType").before("<td class=\"ajoute\"><a href=\"index.php?page=materiel&amp;id_type="+data.id+"\">"+data.nom+"</a></td>") ;
                fermerFormulaire("nouveauMaterielType") ;
                $("table.materielType td.ajoute").hide().fadeIn("slow") ;
            }) ;
        }) ;
    }) ;*/
});

// Ajustements généraux
var preparations = new Array() ;
function preparation (cadre)
{
    // Adaptation des liens d'édition
    cadre.find("a.edition").each(function(i){
        var fermerApresValidation = true ;
        if ($(this).attr("class").indexOf("laisserOuvert") > 0) fermerApresValidation = false ;

        $(this).removeAttr("class") ;
        $(this).click(function(){
        // Déclaration et initialisation d'une variable statique

            page = extrairePage($(this).attr("href")) ;
            ouvrirFormulaire("formulaire_"+(Math.round(Math.random()*1000)), page, function(){
                return fermerApresValidation ;
            }, fermerApresValidation) ;
            return false ;
        }) ;
    });

    // Preparations ajoutées par l'utilisateur
    for (i=0 ; i<preparations.length ; i++)
    {
        preparations[i] (cadre) ;
    }

    // Survol des icones de video
    $("div.videoListe").mouseover(function(){
        $(this).attr("class", $(this).attr("class")+" videoListeSurvole") ;
    }) ;
    $("div.videoListe").mouseout(function(){
        c = $(this).attr("class") ;
        c = c.replace(new RegExp("videoListeSurvole"), "") ;
        $(this).attr("class", c) ;
    }) ;
}
function ajouterPreparation (fn)
{
    preparations[preparations.length] = fn ;
}

// Gestion des champs d'ajout d'un nouveau poste
function champsNouveauPoste()
{
    $("div#champsNouveauPoste").hide() ;
    if ($("#default_poste").val() == "nouveauPoste") $("option#nouveauPoste").attr("selected", "selected") ;;

    evenementSelect = function(){
        // Descriptions
        

        // Formulaire de nouveau poste
        if ($("select#poste").val() == "nouveauPoste")
        {
            $("div#descriptionPoste").hide() ;
            $("div#champsNouveauPoste").show();
        }
        else
        {
            input = $("input#descriptionPoste_"+$("select#poste").val());
            $("div#descriptionPoste").show().html(input.val()) ;
            $("div#champsNouveauPoste").hide() ;
        }


    };
    evenementSelect.apply($("div.formUser select#poste"));
    $("div.formUser select#poste").change(evenementSelect);
}

//frame.attr("src", "formulaire.php?page="+nom)

// Fait apparaître un formulaire
function ouvrirFormulaire(nomFormulaire, page, submitCallback, fermerApresValidation)
{
    // Valeur par défaut de fermerApresValidation
    
    $("div.footer").before("<div class=\"centeredWindow\" id=\"centeredWindow_"+nomFormulaire+"\"><div class=\"box\">"
                            + "</div></div>");

    box = $("div#centeredWindow_"+nomFormulaire+" div.box") ;
    box.css("top", 200 + getScrollPosition()) ;
    $("div#centeredWindow_"+nomFormulaire).attr("nomFormulaire", nomFormulaire).attr("fermerApresValidation", fermerApresValidation) ;
    box.css("visibility", "visible").hide().load("formulaire.php?page="+page, function(){
        $("table.miseEnPage td.corps").css("height", Math.max($("div.content").height(), getScrollPosition() + $("div#centeredWindow_"+nomFormulaire+" div.box").height())) ;
        submitAction = function(){
            $.post("formulaire.php?page="+page, $(this).serialize(), function(data){
                // Taille

                $("div#centeredWindow_"+nomFormulaire+" div.box").html(data) ;
                if (box.find("div.error").length == 0)
                {
                    if (submitCallback != null) 
                        if (submitCallback(box.find("input[name=\"id\"]").val()))
                        {
                            fermerFormulaire(nomFormulaire) ;
                            //$("body").append("<script language=\"JavaScript\">"+box.find("script.callback").html()+"</script>") ; ;
                        }
                    
                        // On passe en paramètre l'id de l'élément ajouté/modifié
                }
                // La fonction de consignes d'envoi du formulaire ayant été réinitialisée,
                // on la reprécise
                box.find("form").submit(submitAction) ;
                box.find(".closeCenteredWindow").click(function(){
                    fermerFormulaire($(this).parents("div.centeredWindow").attr("nomFormulaire")) ;
                    return false ;
                });
                preparation($("div#centeredWindow_"+nomFormulaire)) ;
            }) ;
            return false ;
        } ;
        $(this).find("form").submit(submitAction);
        $(this).find(".closeCenteredWindow").click(function(){
            fermerFormulaire($(this).parents("div.centeredWindow").attr("nomFormulaire")) ;
            return false ;
        });
        preparation($("div#centeredWindow_"+nomFormulaire)) ;
        $(this).slideDown("def") ;
    }) ;

    
}

function fermerFormulaire(nomFormulaire)
{
    $("div#centeredWindow_"+nomFormulaire+" div.box").slideUp("def", function(){
        $("div#centeredWindow_"+nomFormulaire).remove() ;
    }) ;//.find("div").slideUp("def") ;

    //$("div#centeredWindow div.box").css("visibility", "visible") ;

    
    //$('body', $('iframe').contents()).html("yo") ;
    /**/
}
/*
function fermerFormulaire(nomFormulaire)
{
    //$("div#centeredWindow_"+nomFormulaire+" div.box").css("visiblity", "hidden");//contents().html("bonjou") ;/*submit(function(){
    //$("div#centeredWindow_"+nomFormulaire).remove() ;
    alert ("fermerForm");
    /*
    $("div#centeredWindow div.box").css("visibility", "hidden") ;
    $("div#centeredWindow div.box iframe").attr("src", "") ;
}*/

// Afficher les erreurs envoyées depuis un formulaire
function afficherErreurs(error)
{
    $("div#Error").css("visibility", "hidden");
    $("div#hiddenError").css("visibility", "visible").html(error);
}

// Initialisation d'un cadre d'erreur
function initialiserDivError (cadre)
{
    cadre.css("top", "30%").attr("statut", "1").hide().fadeIn("def").append("<div class=\"hautDroite\"><a href=\"#\" class=\"reduireAggrandirError\"><img class=\"reduireAggrandirError\" src=\"images/style/bouton_reduire.gif\"/></a></div>").find("div.hautDroite").click(function(){
        if ($(this).parent().attr("statut")=="1")
        {
            $(this).parent().attr("statut", "0").animate({top: "0%"}, 500, function(){$(this).find("div.content").slideUp("fast") ;});
            $(this).parent().find("img.reduireAggrandirError").attr("src", "images/style/bouton_aggrandir.gif");
        }
        else
        {
            $(this).parent().attr("statut", "1").animate({top: "30%"}, 500).find("div.content").slideDown("fast", function(){$(this).parent();});
            $(this).parent().find("img.reduireAggrandirError").attr("src", "images/style/bouton_reduire.gif");
        }

    });
}


// Initialisation des champs de lien entre table
function initialiserChampLienTables(cadre)
{
    // Cadre remplaçant le champ select
    cadre.find("select").before("<div class=\"listOptions\"></div>").hide() ;

    // Champ de recherche éventuel
    cadre.find("div.searchInput").html("Rechercher : <input type=\"text\" name=\"search\" class=\"search\"/>") ;
    //alert(cadre.find("div.listOptions").length) ;
    // Mise à jour du dif
    cadre.find("select").change(function(){
        cadre = $(this).parents("div.ChampLienTables") ;
        cadre.find("div.listOptions").html("") ;

        $(this).find("option").each(function(i){
            cadre = $(this).parents("div.ChampLienTables") ;
            var opt = $(this) ;

            // Ajout dans le cadre de sélection
            cadre.find("div.listOptions").append("<div class=\"option option"+$(this).val()+"\"><div>"+$(this).html()+"</div></div>") ;
            //alert (cadre.length) ;
            // Synchronisation du clic
            cadre.find("div.listOptions div.option"+$(this).val()).click(function(){
                cadre = $(this).parents("div.ChampLienTables") ;
                opt.attr("selected", !opt.attr("selected")) ;
                cadre.find("select").change() ;
            }).mouseover(function(){ // et du survol par la souris
                opt.mouseover() ;
            });

            // Affichage différent quand sélectionné
            if ($(this).attr("selected"))
                cadre.find("div.listOptions div.option"+$(this).val()+" div").attr("class", "selected") ;
            else cadre.find("div.listOptions div.option"+$(this).val()+" div").attr("class", "deselected") ;
        }) ;

        // Apparition de la description lorsqu'on survole de la souris'
        cadre.find("option").mouseover(function(){
            var cadre = $(this).parents("div.ChampLienTables") ;
            $.getJSON("utilities/jsonDescriptions/jsonDescription"+cadre.attr("tableElementsLies")+".php?id="+$(this).val(), {}, function(data){
                    //cadre = $(this).parents("div.ChampLienTables") ;
                    //alert (data.description) ;
                    cadre.find("div.description").html(data.description) ;

                    // Modification
                    if (data.id > 0) cadre.find("div.description").append(" - <a class=\"edition\" href=\"index.php?page=update"+cadre.attr("tableElementsLies")+"&id="+data.id+"\">modifier</a>") ;
                    preparation(cadre.find("div.description")) ;
                    /*cadre.find("a.modifier").click(function(){
                        var cadre = $(this).parents("div.ChampLienTables") ;
                        ouvrirFormulaire("modifier_"+data.id, "update"+cadre.attr("tableElementsLies")+"&id="+data.id, function(id){
                            $.getJSON("utilities/jsonDescriptions/jsonDescription"+cadre.attr("tableElementsLies")+".php?id="+id, {}, function(newData){
                                cadre.find("option[value=\""+newData.id+"\"]").html(newData.nom) ;
                                cadre.find("select").change() ;
                                //cadre.find("div.listOptions div.option"+id+" div").html(data.nom) ;
                            //cadre.afficherDescription(id) ;
                                fermerFormulaire("modifier_"+newData.id) ;
                                return true ;
                            }) ;

                        }) ;
                    }) ;*/
                }) ;
        }) ;

        

        // Moteur de recherche
        cadre.find("input[name=\"search\"]").keyup() ;
    }).change();

    // Bouton nouveau
    //cadre.find("div.listOptions").after("<input class=\"nouveau\" type=\"button\" value=\"nouveau\"/>") ;
    cadre.find("div.listOptions").after("<a class=\"edition\" href=\"index.php?page=update"+cadre.attr("tableElementsLies")+"\">Nouveau</a>") ;

    // Synchronisation sur l'ajout/mise à jour/suppression
    ajouterTache(cadre.attr("tableElementsLies"), "ajout", function(id){
        $.getJSON("utilities/jsonDescriptions/jsonDescription"+cadre.attr("tableElementsLies")+".php?id="+id, {}, function(data){
            cadre.find("select").append("<option value=\""+data.id+"\">"+data.nom+"</option>").change() ;
        }) ;
    });
    ajouterTache(cadre.attr("tableElementsLies"), "update", function(id){
        $.getJSON("utilities/jsonDescriptions/jsonDescription"+cadre.attr("tableElementsLies")+".php?id="+id, {}, function(data){
            cadre.find("option[value=\""+data.id+"\"]").html(data.nom) ;
            cadre.find("select").change() ;
        }) ;
    });
    ajouterTache(cadre.attr("tableElementsLies"), "delete", function(id){
        cadre.find("option[value=\""+id+"\"]").remove() ;
        cadre.find("select").change() ;
    });

    
    /*cadre.find("input.nouveau").click(function(){
        var cadre = $(this).parents("div.ChampLienTables") ;
        ouvrirFormulaire("nouveau_"+cadre.attr("tableElementsLies"), "update"+cadre.attr("tableElementsLies"), function(id){
            // Ce qui se passe quand on valide le formulaire :
            // Mise à jour du champ select
            $.getJSON("utilities/jsonDescriptions/jsonDescription"+cadre.attr("tableElementsLies")+".php?id="+id, {}, function(data){
                cadre.find("select").append("<option value=\""+data.id+"\">"+data.nom+"</option>").change() ;
                fermerFormulaire("nouveau_"+cadre.attr("tableElementsLies")) ;
                return true ;
            }) ;
        }) ;
    }) ;*/



    // Moteur de recherche
    // Sauvegarde des options
    cadre.find("input[name=\"search\"]").keyup(function(){
        var expr = $(this).val() ;
        //alert(expr) ;
        cadre = $(this).parents("div.ChampLienTables") ;
        cadre.find("div.option").each(function(i){
            valeur = $(this).find("div").html() ;
            if (valeur.indexOf(expr) < 0)
            {
                $(this).hide() ;
            }
            else $(this).show() ;
        }) ;
    });
}

// changement des liens d'édition d'éléments pour que le formulaire s'affiche dynamiquement
var idFenetre = 0 ;
function adapterLiensEdition (cadre)
{
    cadre.find("a.edition").click(function(){
            ouvrirFormulaire("formulaire_"+idFenetre++, extrairePage($(this).attr("href")), function(){
                return true ;
            }, true) ;
            return false ;
        }) ;
        /*$(this).attr("page", extrairePage($(this).attr("href"))).attr("nomFormulaire","formulaire_"+idFenetre) ;
        $(this).removeAttr("href").removeAttr("class").click(function(){
            ouvrirFormulaire("formulaire_"+idFenetre, $(this).attr("page"), function(){
                return true ;
            }, true) ;
            idFenetre++ ;
        }) ;*/
    //});
}

// Extrait le paramètre "page" en get
function extrairePage (url)
{
    expression = new RegExp("page\=.*$") ;
    occurences = url.match(expression) ;
    chaine = occurences[0] ;
    /*if (chaine.substring(chaine.length-1) == "&")
        chaine = chaine.substring (0, chaine.length-1) ;*/
    //alert (chaine) ;
    return chaine.substring(5) ;
}

// Tâches exécutées dynamiquement lors d'ajout / modification / suppression d'éléments
var fonctionsAjout = new Array() ;
function ajouterTache (element, action, fn) // action = "ajout", "update", "delete"
{
   // Initialisation du sous-tableau
    //alert(typeof(fonctionsAjout[element])) ;
    if (typeof(fonctionsAjout[element]) == "undefined") fonctionsAjout[element] = new Array() ;
    if (typeof(fonctionsAjout[element][action]) == "undefined") fonctionsAjout[element][action] = new Array() ;

    // Ajout d'une fonction à la liste'
    fonctionsAjout[element][action][fonctionsAjout[element][action].length] = fn ;
    //alert(fonctionsAjout[element].length) ;
 }
function executerTache(element, action, id)
{
    
    for (i=0 ; i<fonctionsAjout[element][action].length ; i++)
    {
        fonctionsAjout[element][action][i] (id) ;
    }
}

function StarOver(Star) {
	StarNb=Name2Nb(Star);
	for (i=1;i<(StarNb*1)+1;i++) {
		document.getElementById('Star'+i).src=StarOverUrl;
	}
}

function StarOut(Star) {
	StarNb=Name2Nb(Star);
	for (i=1;i<(StarNb*1)+1;i++) {
		document.getElementById('Star'+i).src=StarOutUrl;
	}
}

function Name2Nb(Star) {
	//Le survol d'une étoile ne nous permet pas de connaître directement son numéro
	//Cette fonction extrait donc ce numéro à partir de l'Id
	StarNb=Star.slice(LgtStarBaseId);
	return(StarNb);
}

// Position de la barre de défilement (trouvé sur http://dev.petitchevalroux.net/javascript/)
function getScrollPosition()
{
	a = Array((document.documentElement && document.documentElement.scrollLeft) || window.pageXOffset || self.pageXOffset || document.body.scrollLeft,(document.documentElement && document.documentElement.scrollTop) || window.pageYOffset || self.pageYOffset || document.body.scrollTop);
        return a[1] ;
}
